/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package occho.model;

import java.util.*;
import java.util.List;

/**
 *
 * @author Jorge
 */
public class Usuario extends Observable{
    
    /**
     * Administrador
     */
    public static final String ADMIN = "Administrador";
    /**
     * Profesor
     */
    public static final String PROFESOR = "Profesor";
    /**
     * Alumno
     */
    public static final String ALUMNO = "Alumno";
    
    private int idUsuario;
    private String nombre;
    private String apellidos;
    private String email;
    private String password;
    private String tipo;
    private List<Asignatura> asignaturas;
    
    
    /**
     * Constructor de la clase
     */
    public Usuario() {
        
    }
    
    /**
     * Constructor de la clase.
     * @param idUsuario
     * @param nombre
     * @param apellidos
     * @param email
     * @param password
     * @param tipo
     */
    public Usuario(int idUsuario, String nombre, String apellidos, String email, 
            String password, String tipo) {
        this.idUsuario = idUsuario;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.password = password;
        this.tipo = tipo;
    }
    
    /**
     * Constructor de la clase.
     * @param nombre
     * @param apellidos
     * @param email
     * @param password
     * @param tipo
     */
    public Usuario(String nombre, String apellidos, String email, String password, 
            String tipo) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.password = password;
        this.tipo = tipo;
    }
    
    /**
     * Constructor de la clase.
     * @param nombre
     * @param apellidos
     * @param email
     * @param password
     * @param tipo
     * @param lasignaturas
     */
    public Usuario(String nombre, String apellidos, String email, String password, 
            String tipo, ArrayList<Asignatura> lasignaturas) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.password = password;
        this.tipo = tipo;
        this.asignaturas=lasignaturas;
    }
    
    /**
     * @return the idUsuario
     */
    public int getIdUsuario() {
        return idUsuario;
    }

    /**
     * @param idUsuario 
     */
    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the apellidos
     */
    public String getApellidos() {
        return apellidos;
    }

    /**
     * @param apellidos the apellidos to set
     */
    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    /**
     * @return the asignaturas
     */
    public List<Asignatura> getAsignaturas() {
        return asignaturas;
    }

    /**
     * @param asignaturas the asignaturas to set
     */
    public void setAsignaturas(List<Asignatura> asignaturas) {
        this.asignaturas = asignaturas;
        setChanged();
        notifyObservers();
    }
    
    @Override
    public String toString() {
        String result = nombre;
        if (!tipo.equals(Usuario.ADMIN)) {
            result += " " + apellidos;
        }
        return result;
    }
    
    /**
     * Devuelve si el test ha sido realizado
     * @param test
     * @return true si el test ha sido realizado, false en caso contrario
     */
    public boolean testRealizado(Test test) {
       if (tipo.equals(Usuario.ALUMNO)) {
           for (Asignatura a : asignaturas) {
               for (Test t : a.getTests()) {
                   if (t.getIdTest() == test.getIdTest())
                       return true;
               }
           }
       }
       return false;
    }
}
